unit archivos;
interface
uses declaraciones,sysutils,Dos,crt;

procedure AbrirArchivos(var pedidos:TArchPedidos; var reparados:TArchReparacion;var repuestos:TArchRepuestos);
procedure CerrarArchivos(var pedidos:TArchPedidos; var reparados:TArchReparacion;var repuestos:TArchRepuestos);
procedure ContarPedidos(var pedidos:TArchPedidos;var contador:word);
procedure LeerReparados(var arch:TArchReparacion;var reg:TReparacion;var fin:boolean);

implementation
{Procedimiento que asigna y abre todos los archivos necesitados por el programa}
procedure AbrirArchivos(var pedidos:TArchPedidos;var reparados:TArchReparacion;var repuestos:TArchRepuestos);
    begin
		{Se asignan los nombres de archivos a las variables de archivo}
		assign(pedidos,RUTA_ARCH_PEDIDOS);
		assign(reparados,RUTA_ARCH_REPARADOS);
		assign(repuestos,RUTA_ARCH_REPUESTOS);
		{Se abren todos los archivos en modo reset para tener peersistencia de pedidos entre ejecuciones}

		if FileExists(RUTA_ARCH_PEDIDOS) then
		begin
			reset(pedidos);
		end else begin
			rewrite(pedidos);
		end;
		if FileExists(RUTA_ARCH_REPARADOS) then
		begin
			reset(reparados);
		end else begin
			rewrite(reparados);
		end;
		if FileExists(RUTA_ARCH_REPUESTOS) then
		begin
			reset(repuestos);
		end else begin
			rewrite(repuestos);
		end;
    end;
procedure CerrarArchivos(var pedidos:TArchPedidos; var reparados:TArchReparacion;var repuestos:TArchRepuestos);
var
contador:word;
pedidoTemporal:TPedido;
repuestoTemporal:TRepuesto;
	begin
	contador:=0;
	reset(pedidos);
	while not eof(pedidos) do
	begin
		read(pedidos,pedidoTemporal);
		if pedidoTemporal.sinRepuestos = true then
		begin
			pedidoTemporal.sinRepuestos := false;
			seek(pedidos,contador);
			write(pedidos,pedidoTemporal);
		end;
		contador:=contador+1;
	end;
	contador:=0;
	reset(repuestos);
	while not eof(repuestos) do
	begin
		read(repuestos,repuestoTemporal);
		if repuestoTemporal.faltante = true then
		begin
			repuestoTemporal.faltante := false;
			seek(repuestos,contador);
			write(repuestos,repuestoTemporal);
		end;
		contador:=contador+1;
	end;
	close(pedidos);
	close(reparados);
	close(repuestos);
	end;
procedure ContarPedidos(var pedidos:TArchPedidos;var contador:word);
	begin
        contador:=filesize(pedidos);
	end;
procedure LeerReparados(var arch:TArchReparacion;var reg:TReparacion;var fin:boolean);
	begin
		if not eof(arch)then
		begin
			read(arch,reg);
		end	else begin
			fin:=true;
		end;
	end;
end.
